/**
题目:
题目
将一个给定字符串根据给定的行数，以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时，排列如下：

L   C   I   R
E T O E S I I G
E   D   H   N
之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："LCIRETOESIIGEDHN"。

请你实现这个将字符串进行指定行数变换的函数：

string convert(string s, int numRows);
示例 1:

输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"
示例 2:

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:

L     D     R
E   O E   I I
E C   I H   N
T     S     G

思路:
 
/*
0     6      12        18
1   5 7   11 13    17
2 4   8 10   14 16
3     9      15

第0和numRows-1行是一个等差数列，2*（numRows-1）
其他的可以分为两个：2*(n-1),首项分别是i,2*n-i-2
*/

class Solution {
public:
    string convert(string s, int numRows) {
        if(s.empty()||numRows==1){
            return s;
        }
        string res;
        for(int i=0;i<numRows;i++){
             
             
            if(i==0||i==numRows-1){
                
                for(int k=i; k<s.size();k+=2*(numRows-1)){
                    res+=s[k];
                }
                
            }else {
                for(int k=i,j=2*numRows-i-2;k<s.size()||j<s.size();k+=2*(numRows-1),j+=2*(numRows-1)){
                      if(k<s.size()) res+=s[k];
                     if(j<s.size())  res+=s[j];
                }
            }
             
        }
        return res;
    }
};